package cn.yilongquan.mapper;

import cn.yilongquan.system.RO.LoginRO;
import cn.yilongquan.system.domain.LoginInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * LoginInfo数据访问层接口
 * 直接定义数据库操作方法，不依赖通用父类
 */
public interface LoginInfoMapper {

    /**
     * 根据ID查询登录信息
     * @param id 主键ID
     * @return 登录信息对象
     */
    LoginInfo findById(@Param("id") Long id);

    /**
     * 查询所有登录信息
     * @return 登录信息列表
     */
    List<LoginInfo> findAll();

    /**
     * 根据用户名查询登录信息
     * @param username 用户名
     * @return 登录信息对象
     */
    LoginInfo findByUsername(@Param("username") String username);

    /**
     * 新增登录信息
     * @param loginInfo 登录信息对象
     * @return 影响行数
     */
    int insert(LoginInfo loginInfo);

    /**
     * 更新登录信息
     * @param loginInfo 登录信息对象
     * @return 影响行数
     */
    int update(LoginInfo loginInfo);

    /**
     * 根据ID删除登录信息
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id);

    /**
     * 批量删除登录信息
     * @param ids 主键ID列表
     * @return 影响行数
     */
    int batchDelete(@Param("ids") List<Long> ids);

    /**
     * 统计符合条件的记录数
     * @param username 用户名（可选）
     * @param type 类型（可选）
     * @return 记录总数
     */
    Long count(
            @Param("username") String username,
            @Param("type") Integer type
    );

    /**
     * 分页查询登录信息
     * @param username 用户名（可选）
     * @param type 类型（可选）
     * @param offset 偏移量（分页起始位置）
     * @param size 每页条数
     * @return 分页数据列表
     */
    List<LoginInfo> pageList(
            @Param("username") String username,
            @Param("type") Integer type,
            @Param("offset") Integer offset,
            @Param("size") Integer size
    );

    LoginInfo findByLogin(LoginRO loginRO);
}
